<?php

namespace Mogod\Core\Data\Driver;

/**
 *
 *
 * @author goorus, morph
 */
abstract class DataDriverAbstract
{

	/**
	 * Переводчик запросов
	 *
	 * @inject
	 * @var QueryTranslatorAbstract
	 */
	protected $translator;

	/**
	 * Схема моделей
	 *
	 * @inject
	 * @var Mogod\Core\Model\Scheme\ModelScheme
	 */
	protected $modelScheme;

	/**
	 * Выполняет запрос
	 *
	 * @param \Mogod\Core\Query\Query $query Запрос
	 * @return \Mogod\Core\Query\QueryResult Результат выполнения запроса
	 */
	public function execute($query)
	{
		$translated = $this->getTranslator()->translate($query);
		return $this->executeTranslated($translated);
	}

	/**
	 * Выполняет переведенный запрос
	 *
	 * @param mixed $query Переведенный запрос
	 * @return \Mogod\Core\Query\QueryResult Результат выполнения запроса
	 */
	abstract public function executeTranslated($query);

	/**
	 * Возвращает транслятор запросов
	 *
	 * @return QueryTranslatorAbstract
	 */
	public function getTranslator()
	{
		return $this->translator;
	}

}
